use serde::{Deserialize, Serialize};

/// 令牌模型
/// 对应C#版本TokenModel
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TokenModel {
    pub user_id: u64,
    pub belong_id: u64,
}

impl TokenModel {
    /// 获取数据库名称
    pub fn db_name(&self) -> String {
        format!("DB{}", self.belong_id)
    }

    /// 获取对象键
    pub fn object_key(&self, name: &str) -> String {
        format!("{}-Object-{}", self.belong_id, name)
    }

    /// 获取集合键
    pub fn collection_key(&self, name: &str) -> String {
        format!("{}-Collection-{}", self.belong_id, name)
    }
}

/// 令牌模型绑定器（用于axum提取器）
/// 对应C#版本TokenModelBinder
#[derive(Debug, Clone)]
pub struct TokenModelBinder;

impl TokenModelBinder {
    /// 从请求头读取令牌
    pub fn from_header(authorization: &str) -> Option<TokenModel> {
        // 这里需要实现实际的令牌解析逻辑
        // 暂时返回模拟数据
        let _ = authorization; // 标记为已使用，待实现实际逻辑
        Some(TokenModel {
            user_id: 1,
            belong_id: 1,
        })
    }
}